﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//https://www.bilibili.com/video/BV17b4y1b75K?spm_id_from=333.788.player.switch&vd_source=3e65bc471a8cc2923b4f8ad14987c8f0
namespace Project2.容器
{
    internal class ListStudy
    {
        private static void PrintList(IList<int> list)
        {
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }
        }

        private static void MainListStudy(string[] args)
        {
            //构造
            List<int> list1 = new List<int>();
            List<int> list2 = new List<int>(10);//指定容量
            List<int> list3 = new List<int>() { 1, 2, 3 };
            List<int> list4 = new List<int> { 10, 20, 30 };
            List<int> list5 = new List<int>(list4);//拷贝构造

            list1.Add(1000);//末尾添加元素
            PrintList(list1);

            list2.AddRange(list1);
            PrintList(list2);
            list3.Insert(2, 99);//插入元素
            PrintList(list3);
            list4.AddRange(list2);//添加列表
            PrintList(list4);
            list5.InsertRange(2, list2);//插入列表
            PrintList(list5);

            list1.Clear();
            PrintList(list1);
            list2.Remove(1000);//移除指定元素（第一个）
            PrintList(list2);
            list3.RemoveAt(0);//移除第几个元素
            PrintList(list3);
            list4.RemoveRange(1, 2);//移除从第几个开始的几个元素
            PrintList(list4);
            list5.RemoveAll(e => e == 1000);//移除所有符合条件的元素
            PrintList(list5);

            Console.WriteLine(list5.Count);//元素数量
            Console.WriteLine(list5.Capacity);//数组容量

            list5.ForEach(e => Console.WriteLine(e));

            List<int> list6 = list5.GetRange(1, 2);//获取范围内的子数组

            foreach (var item in list6)
            {
                Console.WriteLine(item);
            }

            int sum = 0;
            list6.ForEach(e => sum += e);
            Console.WriteLine(sum);
            bool res = list6.Contains(1000);
            bool res2 = list2.Exists(e => e > 100);

            int index = list6.IndexOf(1000);//第一个指定元素的索引
            Console.WriteLine(index);
            list2.Add(1000);
            list2.Add(1000);
            list2.Add(1000);
            list2.Add(1000);
            list2.Add(1000);
            int index2 = list2.IndexOf(1000, 1);
            int index3 = list2.IndexOf(1000, 2, 3);
            int index4 = list2.LastIndexOf(1000);//最后一个指定元素的索引
            object obj = new Book();
            Book book = obj as Book;//==
            Book book1 = (obj is Book) ? (Book)obj : null;
            int c = 2 > 1 ? 1 : 0;

            //Book book2 =（Book)obj;// 危险写法：转换失败会抛出 InvalidCastException

            var resList = list6.Find(e => e % 10 == 0);

            var resList2 = list6.FindAll(e => e % 10 == 0);
            var resList3 = list6.FindIndex(e => e % 10 == 0);

            list6.Sort();//排序，自定义类想排序需要实现Icompare接口

            List<int> list7 = new List<int>();
            list7.Add(c);
            list7.Add(index);
            list7[1] = 3;
            //list7[2] = 3;
            PrintList(list7);
        }
    }

    internal class Book
    {
        public int id;
        public string name;
    }
}